Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用AsynTask上载图像未成功_Java_Android_Upload_Android Asynctask - Fatal编程技术网

Java 使用AsynTask上载图像未成功

Java 使用AsynTask上载图像未成功,java,android,upload,android-asynctask,Java,Android,Upload,Android Asynctask,我想使用AsnycTask在解析服务器上上传图像。当我不使用AsyncTask上传图像时,我成功上传并可以检索图像。我想使用AsyncTask,因为在我的应用程序中有两个活动正在使用网络权限,或者如果有人有其他解决方案可以这样做,请告诉我。活动代码: package com.example.faceb; import java.io.ByteArrayOutputStream; import java.io.File; import com.parse.GetDataCallback; imp

我想使用AsnycTask在解析服务器上上传图像。当我不使用AsyncTask上传图像时,我成功上传并可以检索图像。我想使用AsyncTask,因为在我的应用程序中有两个活动正在使用网络权限,或者如果有人有其他解决方案可以这样做,请告诉我。活动代码:

package com.example.faceb;

import java.io.ByteArrayOutputStream;
import java.io.File;
import com.parse.GetDataCallback;
import com.parse.ParseException;
import com.parse.ParseFile;
import com.parse.ParseObject;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class ListActivity extends Activity {

    ImageView image;
    TextView value;

    public Bitmap bm;
    public byte[] bitmapdata;
    public ByteArrayOutputStream data;
    String s =  "FileName";

    public void onCreate(Bundle savedInstanceState) {


    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_list);
    uploadTask task = new uploadTask();
    task.execute(s);

}

private class uploadTask extends AsyncTask<String, Void, String>{

      @Override
        protected void onPostExecute(String result) {
          image.setImageBitmap(bm);
        }

    @Override
    protected String doInBackground(String... params) {
         upload();
        return null;
    }

      }
 public void upload (){
 bm = BitmapFactory.decodeResource(getResources(), R.drawable.back);
    data = new ByteArrayOutputStream();
    bm.compress(Bitmap.CompressFormat.JPEG, 40, data);
    bitmapdata = data.toByteArray();

    ParseFile file = new ParseFile("hai.png", bitmapdata);
    file.saveInBackground();

    ParseObject testObject = new ParseObject("TestObject");
    testObject.put("puu", file);
    testObject.saveInBackground();      

  }
}
package com.example.faceb;
导入java.io.ByteArrayOutputStream;
导入java.io.File;
导入com.parse.GetDataCallback;
导入com.parse.ParseException;
导入com.parse.parse文件;
导入com.parse.ParseObject;
导入android.app.Activity;
导入android.graphics.Bitmap;
导入android.graphics.BitmapFactory;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.Button;
导入android.widget.ImageView;
导入android.widget.TextView;
导入android.widget.Toast;
公共类ListActivity扩展了活动{
图像视图图像;
文本视图值;
公共位图bm;
公共字节[]位映射数据;
公共ByteArrayOutputStream数据;
字符串s=“FileName”;
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_列表);
uploadTask任务=新建uploadTask();
任务。执行;
}
私有类uploadTask扩展了AsyncTask{
@凌驾
受保护的void onPostExecute(字符串结果){
设置图像位图(bm);
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
上传();
返回null;
}
}
公共无效上载(){
bm=BitmapFactory.decodeResource(getResources(),R.drawable.back);
data=newbytearrayoutputstream();
bm.compress(Bitmap.CompressFormat.JPEG,40,数据);
bitmapdata=data.toByteArray();
ParseFile file=新的ParseFile(“hai.png”,bitmapdata);
saveInBackground()文件;
ParseObject testObject=新的ParseObject(“testObject”);
testObject.put(“puu”,文件);
testObject.saveInBackground();
}
}
下面是我的错误日志

10-12 01:10:46.944:E/ActivityThread(2233):未能找到com.facebook.katana.provider.attributeidProvider的提供商信息 10-12 01:11:07.604:E/AndroidRuntime(2233):致命异常:主 10-12 01:11:07.604:E/AndroidRuntime(2233):java.lang.NullPointerException 10-12 01:11:07.604:E/AndroidRuntime(2233):在com.example.faceb.ListActivity$uploadTask.onPostExecute(ListActivity.java:44) 10-12 01:11:07.604:E/AndroidRuntime(2233):在com.example.faceb.ListActivity$uploadTask.onPostExecute(ListActivity.java:1) 10-12 01:11:07.604:E/AndroidRuntime(2233):在android.os.AsyncTask.finish(AsyncTask.java:417) 10-12 01:11:07.604:E/AndroidRuntime(2233):在android.os.AsyncTask.access$300(AsyncTask.java:127) 10-12 01:11:07.604:E/AndroidRuntime(2233):位于android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429) 10-12 01:11:07.604:E/AndroidRuntime(2233):在android.os.Handler.dispatchMessage(Handler.java:99)上 10-12 01:11:07.604:E/AndroidRuntime(2233):在android.os.Looper.loop(Looper.java:123)上 10-12 01:11:07.604:E/AndroidRuntime(2233):位于android.app.ActivityThread.main(ActivityThread.java:4627) 10-12 01:11:07.604:E/AndroidRuntime(2233):位于java.lang.reflect.Method.Invokenactive(本机方法) 10-12 01:11:07.604:E/AndroidRuntime(2233):位于java.lang.reflect.Method.invoke(Method.java:521) 10-12 01:11:07.604:E/AndroidRuntime(2233):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 10-12 01:11:07.604:E/AndroidRuntime(2233):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 10-12 01:11:07.604:E/AndroidRuntime(2233):在dalvik.system.NativeStart.main(本机方法) 10-12 01:11:09.014:E/ActivityThread(2274):未能找到com.facebook.katana.provider.attributeidProvider的提供商信息 10-12 01:48:14.084:E/ActivityThread(2313):未能找到com.facebook.katana.provider.attributeidProvider的提供商信息 10-12 01:48:45.323:E/ActivityThread(2334):未能找到com.facebook.katana.provider.attributeidProvider的提供商信息 10-12 03:19:06.184:E/ActivityThread(2371):未能找到com.facebook.katana.provider.attributeidProvider的提供商信息 10-12 03:19:31.614:E/ActivityThread(2393):未能找到com.facebook.katana.provider.attributeidProvider的提供商信息


使用
AsyncTask
有一些不明显的限制。它的目的是为开发人员提供一种简单的方法,在后台放置一个缓慢的任务,但仍然允许结果填充UI。但是,根据您使用的Android版本的不同,其细节可能会有很大的差异,因为在某些版本中,应用程序中的所有
AsyncTask
子类共享同一线程。在您的情况下,我假设您正在侦听端口以接收图像,并且您正在使用
AsyncTask
来执行此操作。您有一个线程始终在运行,始终阻止应用程序中的所有其他
AsyncTask
线程运行

相反,尝试使用
Runnable
,并避开它

public class TCPClient implements Runnable {

Handler mHandler;
Object[] params;

public static void run(Handler handler, Object... params) {
    TCPClient instance = new TCPClient(handler, params);
    Thread worker = new Thread(instance);
    worker.start();
}

private TCPClient(Handler handler, Object... params) {
    this.params = params;
    mHandler = handler;
}


private void runOnUI(Object result) {
    if (mHandler != null) {
        final Object copy = result;

        mHandler.post(new Runnable() {
            public void run() {
                // Update UI here
            }
        });
    }
}

public void run() {
  // Do slow/background task here
  //Then call
  runOnUI(new String("resulting data..."));
}
您可以在如下位置的UI线程中使用:

public void onClick(View v) {
  Handler handler = new Handler();
  TCPClient.run(handler, new String("Put outgoing data here...");
}

从stacktrace中,
onPostExecute
正在抛出一个
NullPointerException
。从您的代码中,这一定是因为
image
为空。您可以创建变量:

ImageView image;

但我看不到你在哪里初始化它。也许您缺少一个
findViewById
调用
onCreate
来设置它?

发布堆栈跟踪。另外,post saveInBackground.stack trace意味着logcat?saveInBackground是解析服务器提供的方法。它的内置方法不是我创建的。当我开始这项活动时,我又回到了以前的活动。在一个单独的项目中不用异步任务就可以完成这项任务,一切都很好。我对facebook API一无所知,但是