代码之家  ›  专栏  ›  技术社区  ›  Saeed

使用AsyncTask从服务器获取数据

  •  0
  • Saeed  · 技术社区  · 6 年前

    AsyncTask 从服务器初始化。

    这是我的密码:

    public class TestActivity extends AppCompatActivity {
        private static List<String> mPackName;
    
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mPackName = new ArrayList<>();
            try {
                boolean check = new GetDataAsyncTask().execute("1234567").get();
            } catch (InterruptedException e) {
    
            } catch (ExecutionException e) {
                e.printStackTrace();
                e.printStackTrace();
            }
    
        }
    
        private class GetDataAsyncTask extends AsyncTask<String, Void, Boolean> {
    
            @Override
            protected Boolean doInBackground(String... params) {
                final String mCode = params[0];
    
                APIGettingPosts apiGettingPosts = new APIGettingPosts(TestActivity.this, "get_off_code.php");
                apiGettingPosts.getOffCode(new APIGettingPosts.OnOffCodeReceived() {
                    @Override
                    public void onReceived(List<Posts> posts) {
                        if (!(posts == null || posts.isEmpty()))
                            for (int i = 0; i < posts.size(); ++i) {
                                mPackName.add(posts.get(i).getTitle());
                                Log.e("mPackName["+String.valueOf(i)+"]",mPackName.get(i));
                            }
                    }
                });
                Log.e("Size of mPackName: ", String.valueOf(mPackName.size()));
    
                for (int i = 0; i < mPackName.size(); ++i)
                    if (mCode.equals(mPackName.get(i))) {
                        Log.e("Is Equal: ", mPackName.get(i));
                        return true;
                    }
                return false;
            }
        }
    }
    

    mPackName 列表。在比赛结束时 doInBackground GetDataAsyncTask().execute("1234567") 函数存在于 mPackName公司 列表,返回 true

    虽然 GetDataAsyncTask().execute(“1234567”) mPackName公司 列表中,程序返回 false 价值观。

    这个 Log cat

    08-28/com.green公司E/SizeofmPackName::0

    08-28/com.green公司邮箱:E/mPackName[0]:1234567

    08-28/com.green公司E/M包装名称[1]:QAZXSWE

    08-28/com.green公司包装名称[2]:QWERTYU

    mPackName公司 列表中也为零 原木cat ,尽管它有三个值 {'1234567','QAZXSWE','QWERTYU'} .

    如何在中搜索“1234567”值 mPackName公司 是的 check = new GetDataAsyncTask().execute("1234567").get(); 代码?

    2 回复  |  直到 4 年前
        1
  •  3
  •   Krishna Sharma    6 年前

    看起来你甚至不需要 AsyncTask getOffCode 方法已在中运行 背景线程 .

    GetDataAsyncTask 类并创建如下所示的方法。

    private void search(final SearchCallback callback) {
        APIGettingPosts apiGettingPosts = new APIGettingPosts(TestActivity.this, "get_off_code.php");
        apiGettingPosts.getOffCode(new APIGettingPosts.OnOffCodeReceived() {
            @Override
            public void onReceived(List<Posts> posts) {
                if (!(posts == null || posts.isEmpty())) {
                    for (int i = 0; i < posts.size(); ++i) {
                        mPackName.add(posts.get(i).getTitle());
                        Log.e("mPackName[" + String.valueOf(i) + "]", mPackName.get(i));
                        if (mCode.equals(mPackName.get(i))) {
                            callback.onSearchFound(true);
                            break;
                        }
                    }
                }
                callback.onSearchFound(false);
            }
        });
    }
    
    public interface SearchCallback{
        void onSearchFound(boolean success);
    }
    

    search(new SearchCallback(){
        @Override
        public void onSearchFound(boolean success) {
    
        }
    });
    
        2
  •  1
  •   miversen33    6 年前

    尝试在onPostExecute()方法中放置一个开关。

    如。

    ...
    
    private class GetDataAsyncTask extends AsyncTask<String, Void, Boolean> {
    
    @Override
    void onPostExecute(Object o){
        handleResults()
    }
    
    ...
    
    void handleResults(){
    // Insert your check here
    }