我用Volley请求数据传给了,而且Log也有数据,但是当我想用settext()把数据传进去,却显示空指针,而我要是把settext放在点击事件里面,就可以显示处理,求助这是怎么回事
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
getDataFromNet();
initData();
}
private void initData() {
//tv.setMovementMethod(ScrollingMovementMethod.getInstance());// 滚动
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Spanned spanned = Html.fromHtml(html, new Html.ImageGetter() {
@Override
public Drawable getDrawable(String source) {
InputStream is = null;
try {
is = (InputStream) new URL(source).getContent();
Drawable d = Drawable.createFromStream(is, null);
d.setBounds(0, 0, d.getIntrinsicWidth(),
d.getIntrinsicHeight());
is.close();
return d;
} catch (Exception e) {
return null;
}
}
}
, null);
tv.setText(spanned);
}
}
);
}
private void initView() {
tv = (TextView) findViewById(R.id.tv);
}
private void getDataFromNet() {
RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
StringRequest request = new StringRequest(Request.Method.POST, url, new Response.Listener() {
@Override
public void onResponse(String s) {
Log.i("aa", "post请求成功" + s);
Toast.makeText(MainActivity.this, s, Toast.LENGTH_LONG).show();
/**
-
解析数据
*/
processData(s);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Log.i("aa", "post请求失败" + volleyError.toString());
Toast.makeText(MainActivity.this, volleyError.toString(), Toast.LENGTH_LONG).show();
}
}) {
@Override
protected Map getParams() throws AuthFailureError {
HashMap map = new HashMap<>();
map.put("contentid", "567210bd5d774358778b4c51");
map.put("client", "2");
return map;
}};
requestQueue.add(request);
}
private Bean.DData ddata;
private void processData(String s) {
final Bean data = Bean.getData(s);
ddata = data.data;html = ddata.html;
}
}
这样是没问题的。
public class MainActivity extends AppCompatActivity {
private TextView tv;
private String url = "http://api2.pianke.me/article/info";
String html;
Spanned spanned;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
getDataFromNet();
initData();
tv.setText(spanned);
}
private void initData() {
//tv.setMovementMethod(ScrollingMovementMethod.getInstance());// 滚动
spanned = Html.fromHtml(html, new Html.ImageGetter() {
@Override
public Drawable getDrawable(String source) {
InputStream is = null;
try {
is = (InputStream) new URL(source).getContent();
Drawable d = Drawable.createFromStream(is, null);
d.setBounds(0, 0, d.getIntrinsicWidth(),
d.getIntrinsicHeight());
is.close();
return d;
} catch (Exception e) {
return null;
}
}
}
, null);
}
private void initView() {
tv = (TextView) findViewById(R.id.tv);
}
private void getDataFromNet() {
RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
StringRequest request = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
@Override
public void onResponse(String s) {
Log.i("aa", "post请求成功" + s);
Toast.makeText(MainActivity.this, s, Toast.LENGTH_LONG).show();
/**
* 解析数据
*/
processData(s);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Log.i("aa", "post请求失败" + volleyError.toString());
Toast.makeText(MainActivity.this, volleyError.toString(), Toast.LENGTH_LONG).show();
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
HashMap<String, String> map = new HashMap<>();
map.put("contentid", "567210bd5d774358778b4c51");
map.put("client", "2");
return map;
}
};
requestQueue.add(request);
}
private Bean.DData ddata;
private void processData(String s) {
final Bean data = Bean.getData(s);
ddata = data.data;
html = ddata.html;
}
}
但是这样就报空指针,请教各位