Java 处理程序未在android studio中执行
我正在尝试为类构建一个应用程序,但在处理在另一个线程中收集的数据时遇到了问题。数据似乎没有通过handlersJava 处理程序未在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
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()
你自己。使用