标签: android-asynctask

JSONException:在字符 0 处输入结束

我正在尝试从服务器获取 JSON 值。我不知道我的代码有什么问题。我正在使用AsyncTask,这是我的代码doInBackground

代码:

@Override
    protected Void doInBackground(List<String>... articlesRec) {
        for (List<String> articlesPostValue : articlesRec) {
            event = articlesPostValue.get(0);
            category = articlesPostValue.get(1);
            paged = articlesPostValue.get(2);
            deviceID = articlesPostValue.get(3);
        }

        List<NameValuePair> articlesPostValues = new ArrayList<NameValuePair>();
        articlesPostValues.add(new BasicNameValuePair("_event", event));
        articlesPostValues.add(new BasicNameValuePair("cat", category));
        articlesPostValues.add(new BasicNameValuePair("paged", paged));
        articlesPostValues.add(new BasicNameValuePair("_deviceID", deviceID));

        HttpClient hc = new DefaultHttpClient();
        HttpPost hp = new HttpPost(AutoLifeConstants.BASE_URL);

        try {
            hp.setEntity(new UrlEncodedFormEntity(articlesPostValues));

            // Execute HTTP Post Request
            HttpResponse response = hc.execute(hp);

            String result = EntityUtils.toString(response.getEntity());
            String jsontext = new …
Run Code Online (Sandbox Code Playgroud)

android json android-asynctask

1
推荐指数
1
解决办法
2万
查看次数

将对象传递给 AsyncTask

我有一个具有某些状态的对象列表

private ArrayList<MyObjectMap> MyList;
MyList = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

该列表中的每个对象都包含特定值,可以通过互联网更新(例如活动、非活动)。为了更新每个元素,我使用 AsyncTask,所以像这样

for(int i=0;i<MyList.size();i++) {
   new myAsyncTask(MyList.get(i)).execute();
}
Run Code Online (Sandbox Code Playgroud)

稍后,为了更新 GUI 中的列表,我使用了notifyDataSetChanged列表BaseAdapter的 。

这有可能吗?我需要如何更改我的 AsyncTask?

public class myAsyncTask extends AsyncTask<Void, Void, Void> {
    private MyObjectMap myObject;
    protected void onPreExecute() {

    }
    public myAsyncTask(MyObjectMap mom) {
         myObject = mom;
    }

    @Override
    protected Void doInBackground(Void... voids) {
        myObject.updateThisItem();
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

java android android-asynctask

1
推荐指数
1
解决办法
3004
查看次数

在 AsyncTask 中向 onPostExecute 发送参数

onPostExecute 将使用 2 个参数,来自 doInBackground 的 GCMID 和来自调用 AsyncTask 的主函数的 UserID

我试图更改 AsyncTask 声明中的参数,但出现错误“尝试使用不兼容的返回类型”

String UserID = "Admin";
new GCM().execute(null,null,null);
Run Code Online (Sandbox Code Playgroud)
    private class GCM extends AsyncTask<String, String, String> {

        @Override
        protected String[]  doInBackground(String... params) {
            String gcmRegID = GHelper.GCMRegister("123456");
            return gcmRegID;
        }


        @Override
        protected void onPostExecute(String RegID) {
            UTask ut = new UTask();

            // ****** I managed to send RegID
            // ****** I can not send UserID !! How to send it?

            ut.execute(UserID, RegID);
        }
    }
Run Code Online (Sandbox Code Playgroud)

java android parameter-passing android-asynctask

1
推荐指数
1
解决办法
1074
查看次数

Retrofit 内 AsyncTask 中的 onPostExecute 触发得太早

我正在尝试将多个图像上传到服务器并通过 Asynctask 将它们一张一张地发送。上传图像后,我将 URL 保存到本地列表并将其发送到 onPostExecute 中进行处理。但是,我遇到了问题,因为 onPostExecute 触发得太早并且 doInBackground 只返回空列表。

将 URI 传递给 Asynctask

new UploadImages().execute(arrayUri);
Run Code Online (Sandbox Code Playgroud)

我的异步任务

private class UploadImages extends AsyncTask<Uri,Void,List<String>>{

        @Override
        protected List<String> doInBackground(Uri... params) {
            final ArrayList<String> urlList = new ArrayList<>();

            for(Uri uri : params) {
                File file = new File(uri.getPath());
                RequestBody requestBody = RequestBody.create(MediaType.parse("image/*"), file);
                MultipartBody.Part body = MultipartBody.Part.createFormData("image", file.getName(), requestBody);
                RequestBody folderName = RequestBody.create(MediaType.parse("text/plain"), folder);

                ApiEndpointInterface apiEndpointInterface = RetrofitManager.getApiInterface();

                Call<FileInfo> call4File = apiEndpointInterface.postFile(body, folderName);

                call4File.enqueue(new ApiCallback<FileInfo>() {
                    @Override
                    protected void do4Failure(Throwable t) {
                        Log.d(TAG, …
Run Code Online (Sandbox Code Playgroud)

android android-asynctask retrofit

1
推荐指数
1
解决办法
2924
查看次数

Android Api (Okhttps) 在 android 9(pie) 及更高版本中未被调用

我以与其他版本的手机相同的方式调用 android API,并且在 Oreo 版本即 8 之前工作正常。但在 android 9 即派版本及更高版本中不会调用该 API。如果馅饼有任何变化,请告诉我。提前致谢。

 private void getLoginAPI(String username, String password, String compnaycoce) {

    if (NetworkStatus.isNetworkConnected(this)) {
        LoginReqBean bean = new LoginReqBean();
        bean.UserId = username;
        bean.Password = password;
        bean.Company = compnaycoce;
        NetworkService serviceCall = new NetworkService(Constants.loginPost(), Constants.TAG_POST, this);
        serviceCall.call(bean);
    } else
        Toast.makeText(this, "Please check Internet connection", Toast.LENGTH_SHORT).show();
}

@Override
public void onNetworkCallInitiated(String service) {
    progressDialog = ProgressDialog.show(LoginActivity.this, "Info", "Validating Credentials, Please wait...");
    progressDialog.show();

}

 @Override
  public void onNetworkCallCompleted(String service, String response) {
    Log.e("LOGIN JSON …
Run Code Online (Sandbox Code Playgroud)

api android asynchronous android-asynctask okhttp

1
推荐指数
1
解决办法
2652
查看次数

为 keyclock authService.performTokenRequest() 函数执行 doInBackground() 时发生错误

在集成Keyclock SDK时,我尝试交换授权码来访问令牌

authService.performTokenRequest(
resp.createTokenExchangeRequest(),
new AuthorizationService.TokenResponseCallback() {
  @Override public void onTokenRequestCompleted(
        TokenResponse resp, AuthorizationException ex) {
      if (resp != null) {
        // exchange succeeded
      } else {
        // authorization failed, check ex for more details
      }
    }
});
Run Code Online (Sandbox Code Playgroud)

我收到以下错误,

  java.lang.RuntimeException: An error occurred while executing doInBackground()
    at android.os.AsyncTask$3.done(AsyncTask.java:354)
    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
    at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
    at java.util.concurrent.FutureTask.run(FutureTask.java:271)
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
    at java.lang.Thread.run(Thread.java:764)
 Caused by: java.lang.IllegalArgumentException: only https connections are permitted
    at net.openid.appauth.Preconditions.checkArgument(Preconditions.java:116)
    at net.openid.appauth.connectivity.DefaultConnectionBuilder.openConnection(DefaultConnectionBuilder.java:51)
    at net.openid.appauth.AuthorizationService$TokenRequestTask.doInBackground(AuthorizationService.java:418)
    at net.openid.appauth.AuthorizationService$TokenRequestTask.doInBackground(AuthorizationService.java:395) …
Run Code Online (Sandbox Code Playgroud)

android android-asynctask android-backup-service keycloak appauth

1
推荐指数
1
解决办法
1819
查看次数

AsyncTask无法正常工作 - 无法实例化类型错误

我选择了public class FriendMaps extends MapActivity一个菜单项调用,最后我private abstract class DownloadFilesTask extends AsyncTask<Void, Void, Void>在那里做了一些服务器调用并将数据放入本地数组等.

但在我public void onCreate(Bundle savedInstanceState)的FriendMaps活动中,我调用new DownloadFilesTask().execute();并收到以下错误:

错误:无法实例化FriendMaps.DownloadFilesTask类型

从文档:

必须将AsyncTask子类化才能使用.

那将在DownloadFilesTask extends AsyncTask那里完成 .

必须在UI线程上创建任务实例

也许这是我困惑的地方?据我所知,UI线程是当前显示的活动 - 如果是这样,那么FriendMaps活动的onCreate是正确执行的地方();

如果需要完整的代码spinets以获得进一步的帮助,请发表评论,我会在需要的地方添加.

java android android-asynctask

0
推荐指数
1
解决办法
1496
查看次数

如何在ASyncTask旋转完成后结束android服务?

我有一个Downloader服务,可以加载从我的数据库运行的下载列表.

然后它创建一个ASyncTask,它将在后台线程中运行下载.

这一切都运行得很好,但问题是我目前没有办法告诉服务该下载器已经完成.我不知何故必须从ASyncTask的onPostExecute函数(在UIThread上运行)发送一条消息.

我不能简单地远程关闭服务,因为当ASyncTask完成时,服务有一些工作要做.

我已经考虑过从服务中注册一个监听器并在onPostExecute中调用它,但我认为这会导致在Task完成之前关闭服务或一些threadlocking问题等问题.

如何从ASyncTask向我的Downloader服务发送消息(如广播意图)?

编辑
这里有一些代码让你对我正在做的事感到困惑.

DownloadService.java(重要位):

public class DownloadService extends Service implements OnProgressListener {

/** The Downloads. */
private List<Download> mDownloads = new ArrayList<Download>(10);

private DownloadTask mDownloadTask;

/** The Intent receiver that handles broadcasts. */
private BroadcastReceiver mIntentReceiver = new BroadcastReceiver()
{
    @Override
    public void onReceive(Context context, Intent intent) {
        DebugLog.i(TAG, "onRecieve" +intent.toString());
        handleCommand(intent);
    }

};

/* (non-Javadoc)
 * @see android.app.Service#onCreate()
 */
@Override
public void onCreate() {
    DebugLog.i(TAG, "onCreate");
    mNM = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
    IntentFilter commandFilter = …
Run Code Online (Sandbox Code Playgroud)

java service android android-intent android-asynctask

0
推荐指数
1
解决办法
4112
查看次数

来自AsyncTask线程的错误

我在android中有一个应用程序从http页面检索图片.我正在使用AsyncTask线程请求这张图片.

我是这样做的:

 mPostButton.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {

                    for(int i=0;i<friends.size();i++)
                    {
           getUserPic(friends.get(i).getId());
                    }
                }
            });
Run Code Online (Sandbox Code Playgroud)

我有一个ArrayList调用friends和列表中的每个项目我正在调用方法:getUserPic()执行一个AyncTask线程:

public void getUserPic(String userID){
        final String imageURL;
        Bitmap bitmap=null;
        imageURL = "http://graph.facebook.com/"+userID+"/picture?type=small";
        task.execute(new String[] {imageURL});

    }
Run Code Online (Sandbox Code Playgroud)

所以每次调用都会getUserPic()使用AsyncTask线程来调用imageURL.

问题是我得到FC ....这里是我的logcat的样子:

java.lang.IllegalStateException: Cannot execute task: the task is already running.
   at android.os.AsyncTask.execute(AsyncTask.java:380)
   at com.facebook.android.Example.getUserPic(Example.java:129)
   at com.facebook.android.Example$3.onClick(Example.java:114)
   at android.view.View.performClick(View.java:2364)
   at android.view.View.onTouchEvent(View.java:4179)
   at android.widget.TextView.onTouchEvent(TextView.java:6540)
   at android.view.View.dispatchTouchEvent(View.java:3709)
   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
Run Code Online (Sandbox Code Playgroud)

任何人,对此有任何解决方案吗?谢谢你!

android android-asynctask

0
推荐指数
1
解决办法
5016
查看次数

将接口传递给AsyncTask是一种很好的做法

我有一个接口类

public interface AsyncTaskExecuteCommand {
public Object executeCommand(String jsonLocation) throws IOException,JSONException;
}
Run Code Online (Sandbox Code Playgroud)

我有一个存储此接口实例的HashMap

public static HashMap<String,AsyncTaskExecuteCommand> executeCommandHashMap

executeCommandHashMap.put(COMMAND_CORE_FIELD_FETCH, new AsyncTaskExecuteCommand() {
        @Override
        public Object executeCommand(String jsonLocation) throws IOException, JSONException{
                           //return some thing
        }
    });

executeCommandHashMap.put(COMMAND_REGISTER_FIELD_FETCH, new AsyncTaskExecuteCommand() {
        @Override
        public Object executeCommand(String jsonLocation) throws IOException,
                JSONException {
                          //return some thing
        }
    });
Run Code Online (Sandbox Code Playgroud)

我的AsyncTask名为GeneralAsyncTask包含

doInBackground(){

 AsyncTaskExecuteCommand asyncTaskExecuteCommand = executeCommandHashMap.get(params[0]);
 return asyncTaskExecuteCommand.executeCommand(params[1]);
}
Run Code Online (Sandbox Code Playgroud)

而这个AsyncTask被调用

new GeneralAsyncTask().execute(COMMAND_REGISTER_FIELD_FETCH,"http://something");
Run Code Online (Sandbox Code Playgroud)

我这样做是因为我的AsyncTask的一般结构保持不变,即它做了一些方法执行并返回一些值.只有方法执行类型和返回值会有所不同.如果我不实现传递接口到异步任务,我最终创建了许多AsyncTask类.那么,这种方法是否可以解决我的问题?

android interface android-asynctask

0
推荐指数
1
解决办法
2453
查看次数