2016-07-10 6 views
0

私は2つのデバイス間でwifi dirictを使用して画像を送信しようとしています。受信側装置はそれをデータベースに送る。getDrawable()が機能していません。メソッド 'getDrawable()'を解決できません。

それは

164-5196/com.example.italiano_1313.wifidirectdemo E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #2 Process: com.example.italiano_1313.wifidirectdemo, PID: 4164 java.lang.RuntimeException: An error occured while executing doInBackground() at android.os.AsyncTask$3.done(AsyncTask.java:300) at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) at java.util.concurrent.FutureTask.setException(FutureTask.java:222) at java.util.concurrent.FutureTask.run(FutureTask.java:242) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:818) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.graphics.Bitmap.compress(android.graphics.Bitmap$CompressFormat, int, java.io.OutputStream)' on a null object reference at com.example.italiano_1313.wifidirectdemo.DeviceDetailFragment$Encode_image.doInBackground(DeviceDetailFragment.java:183) at com.example.italiano_1313.wifidirectdemo.DeviceDetailFragment$Encode_image.doInBackground(DeviceDetailFragment.java:174) at android.os.AsyncTask$2.call(AsyncTask.java:288) at java.util.concurrent.FutureTask.run(FutureTask.java:237)             at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)             at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)             at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)             at java.lang.Thread.run(Thread.java:818)

はあなたがそれで

を見てくださいすることができ、これは、このクラス

プライベートクラスの私が持っているコードEncode_imageがAsyncTask {

@Override 
    protected Void doInBackground(Void... voids) { 


     ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
     bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream); 

     byte[] array = stream.toByteArray(); 
     encoded_string = Base64.encodeToString(array, 0); 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void aVoid) { 

     makeRequest(); 
    } 
} 


public void makeRequest() { 
    RequestQueue requestQueue = Volley.newRequestQueue(getActivity().getApplicationContext()); 
    StringRequest request = new StringRequest(Request.Method.POST, "http://wam227.comli.com/connection.php", 
      new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 

       } 
      }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 

     } 
    }) { 
     @Override 
     protected Map<String, String> getParams() throws AuthFailureError { 
      HashMap<String,String> map = new HashMap<>(); 
      map.put("encoded_string",encoded_string); 
      map.put("image_name",image_name); 

      return map; 
     } 
    }; 
    requestQueue.add(request); 
} 

/** 
* Updates the UI with device data 
* 
* @param device the device to be displayed 
*/ 
public void showDetails(WifiP2pDevice device) { 
    this.device = device; 
    this.getView().setVisibility(View.VISIBLE); 
    TextView view = (TextView) mContentView.findViewById(R.id.device_address); 
    view.setText(device.deviceAddress); 
    view = (TextView) mContentView.findViewById(R.id.device_info); 
    view.setText(device.toString()); 
} 
/** 
* Clears the UI fields after a disconnect or direct mode disable operation. 
*/ 



public void resetViews() { 
    mContentView.findViewById(R.id.btn_connect).setVisibility(View.VISIBLE); 
    TextView view = (TextView) mContentView.findViewById(R.id.device_address); 
    view.setText(R.string.empty); 
    view = (TextView) mContentView.findViewById(R.id.device_info); 
    view.setText(R.string.empty); 
    view = (TextView) mContentView.findViewById(R.id.group_owner); 
    view.setText(R.string.empty); 
    view = (TextView) mContentView.findViewById(R.id.status_text); 
    view.setText(R.string.empty); 
    mContentView.findViewById(R.id.btn_start_client).setVisibility(View.GONE); 
    this.getView().setVisibility(View.GONE); 
} 
/** 
* A simple server socket that accepts connection and writes some data on 
* the stream. 
*/ 
public class FileServerAsyncTask extends AsyncTask<Void, Void, String> { 
    private Context context; 
    private TextView statusText; 
    /** 
    * @param context 
    * @param statusText 
    */ 
    public FileServerAsyncTask(Context context, View statusText) { 
     this.context = context; 
     this.statusText = (TextView) statusText; 
    } 
    @Override 
    protected String doInBackground(Void... params) { 
     try { 
      ServerSocket serverSocket = new ServerSocket(8988); 
      Log.d(WiFiDirectActivity.TAG, "Server: Socket opened"); 
      Socket client = serverSocket.accept(); 
      Log.d(WiFiDirectActivity.TAG, "Server: connection done"); 
      final File f = new File(Environment.getExternalStorageDirectory() + "/" 
        + context.getPackageName() + "/wifip2pshared-" + System.currentTimeMillis() 
        + ".jpg"); 
      File dirs = new File(f.getParent()); 
      if (!dirs.exists()) 
       dirs.mkdirs(); 
      f.createNewFile(); 
      Log.d(WiFiDirectActivity.TAG, "server: copying files " + f.toString()); 
      InputStream inputstream = client.getInputStream(); 
      copyFile(inputstream, new FileOutputStream(f)); 

      serverSocket.close(); 

      return f.getAbsolutePath(); 
     } catch (IOException e) { 
      Log.e(WiFiDirectActivity.TAG, e.getMessage()); 
      return null; 
     } 
    } 


    /* 
    * (non-Javadoc) 
    * @see android.os.AsyncTask#onPostExecute(java.lang.Object) 
    */ 
    @Override 
    protected void onPostExecute(String result) { 
     if (result != null) { 
      statusText.setText("File copied - " + result); 
      Intent intent = new Intent(); 
      intent.setAction(android.content.Intent.ACTION_VIEW); 
      intent.setDataAndType(Uri.parse("file://" + result), "image/*"); 
      context.startActivity(intent); 

      bitmap =((BitmapDrawable) Uri.parse("file://" + result).getDrawable()).getBitmap(); 
      new Encode_image().execute(); 



     } 

    } 
    /* 
    * (non-Javadoc) 
    * @see android.os.AsyncTask#onPreExecute() 
    */ 
    @Override 
    protected void onPreExecute() { 
     statusText.setText("Opening a server socket"); 
    } 
} 
public static boolean copyFile(InputStream inputStream, OutputStream out) { 
    byte buf[] = new byte[1024]; 
    int len; 
    try { 
     while ((len = inputStream.read(buf)) != -1) { 
      out.write(buf, 0, len); 
     } 
     out.close(); 
     inputStream.close(); 
    } catch (IOException e) { 
     Log.d(WiFiDirectActivity.TAG, e.toString()); 
     return false; 
    } 
    return true; 
} 
を拡張している私は、このエラーを与えます

}

答えて

0

ログによると、doInBackgroundの2行目のビットマップがnullであると思われるので、他のコードを確認してください。

+0

ビットマップを_onPostExecute_メソッドで初期化しましたが、このエラーが発生しました。エラー:(312,72)エラー:シンボルメソッドgetDrawable()を見つけることができません –

+0

'Uri.parse(" file:// "+ result) .getDrawable() '私のIDEはこの行にエラーを表示します.Uriには' getDrawable()? 'というAPIレベルがありますか? – Harlan

関連する問題