Java 处理程序未在android studio中执行

Java 处理程序未在android studio中执行,java,android,android-handler,Java,Android,Android Handler,我正在尝试为类构建一个应用程序,但在处理在另一个线程中收集的数据时遇到了问题。数据似乎没有通过handlershandleMessage方法传递 这是我的主要活动 import android.content.Context; import android.content.res.Resources; import android.os.Handler; import android.os.Message; import android.support.constraint.Constraint

我正在尝试为类构建一个应用程序,但在处理在另一个线程中收集的数据时遇到了问题。数据似乎没有通过handlers
handleMessage
方法传递

这是我的主要活动

import android.content.Context;
import android.content.res.Resources;
import android.os.Handler;
import android.os.Message;
import android.support.constraint.ConstraintLayout;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
import java.nio.Buffer;
import java.util.*;

public class MainActivity extends AppCompatActivity implements BookListFragment.OnFragmentInteractionListener {
    ArrayList<Book> names;
    private boolean twoPane = false;
    BookListFragment blf;
    BookDetailsFragment bdf;
   // Handler bookHandler;


    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        twoPane = findViewById(R.id.container2) == null;
        names = new ArrayList<Book>();
        final EditText searchBar = findViewById(R.id.searchbar);
        final Handler bookHandler = new Handler(new Handler.Callback() {
            @Override
            public boolean handleMessage(Message msg) {

                String response = (String) msg.obj;
                try{
                    JSONArray tmp = new JSONArray(response);
                    for(int i = 0; i < tmp.length(); i++){
                        JSONObject a = tmp.getJSONObject(i);
                        int id = a.getInt("book_id");
                        String title = a.getString("title");
                        Log.d("BOOK_id", a.getInt("book_id")+"");
                        String author = a.getString("author");
                        int published =  a.getInt("published");
                        String coverUrl = a.getString("cover_url");
                        Book book = new Book(id,title,author,published,coverUrl);
                        names.add(book);
                    }

                } catch (Exception e){
                    Log.d("FAIL", e.toString());
                }
                return false;
            }
        });

        Thread t = new Thread(){
            @Override
            public void run() {
                String searchString = searchBar.getText().toString();
                URL bookURL;
                try {
                    bookURL = new URL("https://kamorris.com/lab/audlib/booksearch.php?search="+searchString);
                    BufferedReader reader = new BufferedReader(new InputStreamReader(bookURL.openStream()));
                    String response = "",tmpResponse;
                    tmpResponse = reader.readLine();
                    while(tmpResponse != null){
                        response = response + tmpResponse;

                        tmpResponse = reader.readLine();
                    }
                    Log.d("Handler", response);

                    Message msg = Message.obtain();
                    msg.obj = response;
                    bookHandler.handleMessage(msg);
                } catch (Exception e) {
                    Log.e("Fail", e.toString());
                }

            }
        };
        t.start();
        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Thread t = new Thread(){
                    @Override
                    public void run() {
                        String searchString = searchBar.getText().toString();
                        URL bookURL;
                        try {
                            bookURL = new URL("https://kamorris.com/lab/audlib/booksearch.php?search="+searchString);
                            BufferedReader reader = new BufferedReader(new InputStreamReader(bookURL.openStream()));
                            String response = "",tmpResponse;
                            tmpResponse = reader.readLine();
                            while(tmpResponse != null){
                                response = response + tmpResponse;
                                tmpResponse = reader.readLine();
                            }
                            JSONArray bookOBJ= new JSONArray(response);
                            Message msg = Message.obtain();
                            msg.obj = bookOBJ;
                            bookHandler.handleMessage(msg);
                        } catch (Exception e) {
                            Log.d("Fail", e.toString());
                        }

                    }
                };
                t.start();
            }
        });
    }
导入android.content.Context;
导入android.content.res.Resources;
导入android.os.Handler;
导入android.os.Message;
导入android.support.constraint.ConstraintLayout;
导入android.support.v4.app.FragmentManager;
导入android.support.v4.app.FragmentTransaction;
导入android.support.v4.view.ViewPager;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.view;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.FrameLayout;
导入org.json.JSONArray;
导入org.json.JSONException;
导入org.json.JSONObject;
导入java.io.BufferedReader;
导入java.io.IOException;
导入java.io.InputStreamReader;
导入java.net.HttpURLConnection;
导入java.net.MalformedURLException;
导入java.net.URI;
导入java.net.URL;
导入java.nio.Buffer;
导入java.util.*;
公共类MainActivity扩展AppCompatActivity实现BookListFragment.OnFragmentInteractionListener{
数组列表名称;
private boolean twoPane=false;
图书目录;
图书资料分部bdf;
//书商;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
twoPane=findViewById(R.id.container2)==null;
名称=新的ArrayList();
最终编辑文本搜索栏=findViewById(R.id.searchBar);
final Handler bookHandler=new Handler(new Handler.Callback()){
@凌驾
公共布尔句柄消息(消息消息消息){
字符串响应=(字符串)msg.obj;
试一试{
JSONArray tmp=新JSONArray(响应);
对于(int i=0;i
假设代码从api获取数据,然后在
handleMessage
方法中将数据解析为包含两个int和三个string变量的book对象。问题是处理程序从不执行任何代码


执行时,调试器日志应该有一个响应字符串,其中包含来自API的数据,然后是JSON文件中每本书的id,但它只显示来自API的数据。

利用改型或截取本身,更好、快速、可靠和轻松地处理API调用,而不是调用
handleMessage()
你自己。使用