2015-04-03 95 views
0

伙计们我正在开发一个应用程序在Android上将图像从android应用程序传输到服务器。我已经在JAVA中实现了服务器,到目前为止,该应用程序仅用于内部网络目的。我在ASYNC类的代码中遇到了致命异常的问题,我没有得到我做错了什么。请帮助我,我会非常感谢你的人。致命异常:AsyncTask#1 java.lang.RuntimeException:执行doInBackground()时发生错误,同时发送图像到服务器

的Android应用程序代码

public class TakeImage extends ActionBarActivity { 
Socket client; 
DatagramSocket clientSocket; 
byte[] image; 
byte[] img; 
private Bitmap bitmap; 
private ImageButton camera; 
private ImageButton gallery; 
ImageView targetImage; 
NotificationManager nm; 
Uri fileUri = null; 
private Button process; 
private static int TAKE_PICTURE = 1; 
private static int FROM_GALLERY = 2; 
public static final int MEDIA_TYPE_IMAGE = 1; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_take_image); 
    //Notification Code 
    nm=(NotificationManager)getSystemService(NOTIFICATION_SERVICE); 
    // 
    targetImage=(ImageView)findViewById(R.id.setImage); 
    process=(Button)findViewById(R.id.process); 
    process.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //bitmap=BitmapFactory.decodeResource(getResources(), R.id.setImage); 
      BitmapDrawable bd=(BitmapDrawable)targetImage.getDrawable(); 
      bitmap=bd.getBitmap(); 
      ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
      bitmap.compress(Bitmap.CompressFormat.PNG, 90, stream); 
      image = stream.toByteArray(); 
      SendMessage sendMessageTask = new SendMessage(); 
      sendMessageTask.execute(); 
      Toast.makeText(getApplicationContext(),"Processing",Toast.LENGTH_LONG).show(); 
     } 
    }); 
} 
private class SendMessage extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected Void doInBackground(Void... params) { 
     try { 
      int c=0; 
      InetAddress inet=InetAddress.getByName("192.168.1.4"); 
      client = new Socket("192.168.1.4", 4000); // connect to the server 
      for(int i=0;i<image.length;i++) { 
       img[c] = image[i]; 
       c++; 
        DatagramPacket packet; 
        packet = new DatagramPacket(img,img.length,inet,4000); 
        img = new byte[1024]; 
        c = 0; 
        clientSocket.send(packet); 
        System.out.println("sent a mini-packet"); 

      } 
     } catch (UnknownHostException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

} 

服务器端代码

public class Server { 
private static ServerSocket serverSocket; 
private static Socket clientSocket; 
private static InputStreamReader inputStreamReader; 
private static BufferedReader bufferedReader; 
private static String message; 

public static void main(String[] args) throws UnknownHostException { 
    try { 
     serverSocket = new ServerSocket(4000); // Server socket 

    } catch (IOException e) { 
     System.out.println("Could not listen on port: 4444"); 
    } 
      System.out.println("Server started. Listening to the port 4444"); 

    while (true) { 
     try { 

      clientSocket = serverSocket.accept(); // accept the client connection 
      inputStreamReader = new InputStreamReader(clientSocket.getInputStream()); 
      bufferedReader = new BufferedReader(inputStreamReader); // get the client message 
      message = bufferedReader.readLine(); 

      System.out.println(message); 
      inputStreamReader.close(); 
      clientSocket.close(); 

     } catch (IOException ex) { 
      System.out.println("Problem in message reading"); 
     } 
    } 

} 

我只执行了服务器刚刚recieving字节不是将其转换为图像。

登录猫

04-04 07:13:27.630  920-981/com.example.ali.cottondiseasedetection E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1 
java.lang.RuntimeException: An error occured while executing doInBackground() 
     at android.os.AsyncTask$3.done(AsyncTask.java:299) 
     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352) 
     at java.util.concurrent.FutureTask.setException(FutureTask.java:219) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:239) 
     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
     at java.lang.Thread.run(Thread.java:856) 
Caused by: java.lang.NullPointerException 
     at com.example.ali.cottondiseasedetection.TakeImage$SendMessage.doInBackground(TakeImage.java:151) 
     at com.example.ali.cottondiseasedetection.TakeImage$SendMessage.doInBackground(TakeImage.java:135) 
     at android.os.AsyncTask$2.call(AsyncTask.java:287) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:234) 

+1

请在logcat中发布错误的确切输出。 – Chris 2015-04-03 17:41:15

+0

@Chris现在我也根据您的要求放置了日志猫。 – 2015-04-04 07:17:29

回答

0

需要初始化数组IMG你分配什么之前。

img = new byte[1024];  
for(int i=0;i<image.length;i++) { 
     img[c] = image[i]; 
     c++; 
     DatagramPacket packet; 
     packet = new DatagramPacket(img,img.length,inet,4000); 
     img = new byte[1024]; 
     c = 0; 
     clientSocket.send(packet); 
     System.out.println("sent a mini-packet"); 
} 
+0

我也试过这个,但没有为我工作。 – 2015-04-04 07:18:12

相关问题