嘿我正在开发一个有一个片段的应用程序,我从该片段调用一个活动。在片段中我已经定制了列表视图。在调用活动时,我收到此错误。
日志
FATAL EXCEPTION: main
11-02 04:46:26.466: E/AndroidRuntime(6973): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.prototype/activities.CategoryAct}: java.lang.NullPointerException
11-02 04:46:26.466: E/AndroidRuntime(6973): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2306)
11-02 04:46:26.466: E/AndroidRuntime(6973): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358)
11-02 04:46:26.466: E/AndroidRuntime(6973): at android.app.ActivityThread.access$600(ActivityThread.java:156)
11-02 04:46:26.466: E/AndroidRuntime(6973): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1340)
11-02 04:46:26.466: E/AndroidRuntime(6973): at android.os.Handler.dispatchMessage(Handler.java:99)
11-02 04:46:26.466: E/AndroidRuntime(6973): at android.os.Looper.loop(Looper.java:153)
11-02 04:46:26.466: E/AndroidRuntime(6973): at android.app.ActivityThread.main(ActivityThread.java:5297)
11-02 04:46:26.466: E/AndroidRuntime(6973): at java.lang.reflect.Method.invokeNative(Native Method)
11-02 04:46:26.466: E/AndroidRuntime(6973): at java.lang.reflect.Method.invoke(Method.java:511)
11-02 04:46:26.466: E/AndroidRuntime(6973): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
11-02 04:46:26.466: E/AndroidRuntime(6973): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
11-02 04:46:26.466: E/AndroidRuntime(6973): at dalvik.system.NativeStart.main(Native Method)
11-02 04:46:26.466: E/AndroidRuntime(6973): Caused by: java.lang.NullPointerException
11-02 04:46:26.466: E/AndroidRuntime(6973): at android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:143)
11-02 04:46:26.466: E/AndroidRuntime(6973): at android.app.AlertDialog.<init>(AlertDialog.java:98)
11-02 04:46:26.466: E/AndroidRuntime(6973): at android.app.ProgressDialog.<init>(ProgressDialog.java:77)
11-02 04:46:26.466: E/AndroidRuntime(6973): at activities.CategoryAct$StoreUtil.onPreExecute(CategoryAct.java:124)
11-02 04:46:26.466: E/AndroidRuntime(6973): at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
11-02 04:46:26.466: E/AndroidRuntime(6973): at android.os.AsyncTask.execute(AsyncTask.java:534)
11-02 04:46:26.466: E/AndroidRuntime(6973): at activities.CategoryAct.onCreate(CategoryAct.java:77)
11-02 04:46:26.466: E/AndroidRuntime(6973): at android.app.Activity.performCreate(Activity.java:5122)
11-02 04:46:26.466: E/AndroidRuntime(6973): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081)
11-02 04:46:26.466: E/AndroidRuntime(6973): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2270)
11-02 04:46:26.466: E/AndroidRuntime(6973): ... 11 more
在活动中,我正在设置另一个列表视图,使用相同的自定义适配器和列表视图布局。
以下是活动的代码:
package activities;
import java.util.ArrayList;
import org.json.JSONException;
import org.json.JSONObject;
import com.example.prototype.R;
import com.example.prototype.utility.JSONUtil;
import custom.list.view.CustomListViewAdapter;
import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.Html;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AbsListView.OnScrollListener;
public class CategoryAct extends Activity implements OnScrollListener,OnItemClickListener{
ArrayList<String> images=new ArrayList<String>();
ArrayList<String> offer=new ArrayList<String>();
ArrayList<String> cat=new ArrayList<String>();
ArrayList<String> store=new ArrayList<String>();
ArrayList<String> exp_date=new ArrayList<String>();
ArrayList<String> url_visit=new ArrayList<String>();
ArrayList<String> code=new ArrayList<String>();
String res;
boolean init_data_loaded=false;
int count=0;
int limit=0;
int curr_pos;
String url= "its a private url";
ListView list;
String img_add;
Context ctx;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.category_act);
ctx=getApplicationContext();
list=(ListView) findViewById(R.id.cat_act_list);
Intent i=getIntent();
Bundle b=i.getBundleExtra("category");
Log.e("cat_act", b.getString("category"));
android.app.ActionBar actionBar = getActionBar();
actionBar.setHomeButtonEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
list.setOnScrollListener((OnScrollListener) this);
list.setOnItemClickListener((OnItemClickListener) this);
if(isInternetOn())
new StoreUtil().execute();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id ==android.R.id.home) {
Log.e("cat_act", "Home clicked");
this.finish();
return true;
}
if (id == R.id.search_menu) {
Toast.makeText(getApplicationContext(), "Searched Clicked ", Toast.LENGTH_LONG).show();
return true;
}
if (id == R.id.share_menu) {
Toast.makeText(getApplicationContext(), "Share Clicked ", Toast.LENGTH_LONG).show();
return true;
}
return super.onOptionsItemSelected(item);
}
class StoreUtil extends AsyncTask<String, String, String> {
ProgressDialog pb;
@Override
protected void onPreExecute() {
super.onPreExecute();
pb=new ProgressDialog(getApplication());
if(init_data_loaded==false){
pb.setMessage("Loading Data...");
pb.setIndeterminate(false);
pb.setCancelable(true);
if(pb==null){
Log.e("background_method_category", "pb is null");
}else
Log.e("background_method_category", "pb is not null");
pb.show();}
}
@Override
protected String doInBackground(String... params) {
Log.e("background_method_category", "In the background method");
if(init_data_loaded==false){
JSONUtil util=new JSONUtil();
res=util.setConnection(url, "get");
init_data_loaded=true;
}
return null;
}
void setData(){
Log.e("listview_end", "called");
try {
JSONObject jobj = new JSONObject(res);
Log.e("background_method_category", "jobject returned");
JSONObject jres;
while(count<10){
jres= jobj.getJSONObject(""+limit);
count++;
limit++;
code.add(jres.getString("coupon_code"));
String store_name=jres.getString("stores");
store.add(store_name);
String url_visit_name=jres.getString("coupon_aff_url");
url_visit.add(url_visit_name);
String expiry_date=jres.getString("expire_date");
exp_date.add(expiry_date);
String coupon_title=jres.getString("coupon_title");
String cat_name=jres.getString("coupon_category");
String temp_url;
String img_url=jres.getString("url");
{
temp_url=img_url.replace("egravity.in", "sellurdreams.com");
}
images.add(temp_url);
offer.add(coupon_title);
cat.add(cat_name);
}
Log.e("background_method_category", "out of while loop");
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
protected void onPostExecute(String result) {
/* if(pb.isShowing()){
pb.dismiss();
}
// */
setData();
CustomListViewAdapter adapt=new CustomListViewAdapter(ctx, images, offer, cat);
list.setAdapter(adapt);
Log.e("background_method_category",""+curr_pos);
list.setSelection(curr_pos-2);
super.onPostExecute(result);
}
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if (firstVisibleItem+visibleItemCount==totalItemCount && totalItemCount!=0) {
Log.e("background_method_category", "end reached"+images.size());
count=0;
curr_pos=totalItemCount;
new StoreUtil().execute();
}
if(totalItemCount%10==0)
System.gc();
}
@Override
public void onItemClick(AdapterView<?> parent, View view, final int position,
long id) {
final Dialog dialog = new Dialog(getApplication());
dialog.setContentView(R.layout.dialog);
dialog.setTitle("Code Copied");
dialog.setTitle( Html.fromHtml("<font color='#B21313'>Code Copied</font>"));
Button cancel=(Button) dialog.findViewById(R.id.cancel_dialog);
Button proceed=(Button) dialog.findViewById(R.id.proceed_dialog);
int dividerid=dialog.getContext().getResources().getIdentifier("android:id/titleDivider", null, null);
View divider=dialog.findViewById(dividerid);
divider.setBackgroundColor(getResources().getColor(R.color.background_tab));
TextView content_dialog = (TextView) dialog.findViewById(R.id.content_dialog);
content_dialog.setText("The coupon code has been copied to your clipboard.Click below to start shopping on "+store.get(position)+". Expiry Date of coupon is : "+exp_date.get(position));
dialog.show();
cancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
dialog.dismiss();
}
});
proceed.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
ClipboardManager clipboard = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("code_lootainment", code.get(position));
clipboard.setPrimaryClip(clip);
Intent myIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url_visit.get(position)));
dialog.dismiss();
startActivity(myIntent);
}
});
}
public final boolean isInternetOn() {
// get Connectivity Manager object to check connection
ConnectivityManager connec =
(ConnectivityManager)ctx.getSystemService(ctx.CONNECTIVITY_SERVICE);
// Check for network connections
if ( connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.CONNECTED ||
connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.CONNECTING ||
connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.CONNECTING ||
connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.CONNECTED ) {
// if connected with internet
Toast.makeText(ctx, " Connected ", Toast.LENGTH_LONG).show();
return true;
} else if (
connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.DISCONNECTED ||
connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.DISCONNECTED ) {
Toast.makeText(ctx, " Not Connected ", Toast.LENGTH_LONG).show();
return false;
}
return false;
}
}
答案 0 :(得分:1)
不要从applicationContext创建对话框。它必须使用活动上下文。 使用活动背景。
final Dialog dialog = new Dialog(this);
答案 1 :(得分:0)
您拨打new StoreUtil().execute()
的电话是NullPointerException
。
您的StoreUtil<String, String, String>
AsyncTask将String
作为输入Param,而您正在调用execute()
而没有任何参数。
因此,如果您没有任何值作为Param传递,请致电new StoreUtil().execute("")