PDA

View Full Version : پیام unexpectedly



hamid2006
شنبه 29 شهریور 1393, 11:53 صبح
سلام
من برنامه نویسی اندروید تازه شروع کرده ام می خواستم بدانم

پیغام خطای The Application appname(activity name) has stopped) unexpectedly please try again

پیغام خطا برای مشکل خاص یا کلی هست و چطور می تونم مشکل اصلی را پیدا کنم.

با تشکر

saeed_g21
شنبه 29 شهریور 1393, 12:17 عصر
برای اینکار کافیست به قسمت Logcat مراجعه کنید و با خواندن پیغام ها میتوانید نسبت به رفع خطا اقدام نمایید

از این به بعد برای یافتن خطا حتما پیغامی که در Logcat به صورت قرمز رنگ مشخص میشه رو قرار بدید تا نسبت به خطایابی و نهایتا رفع خطا اقدام شود

hamid2006
شنبه 29 شهریور 1393, 12:27 عصر
ممنون. چقدر اررور داده


09-17 13:17:10.820: E/AndroidRuntime(546):
FATAL EXCEPTION: main
java.lang.NullPointerException
at com.astro.mania.activities.NewsList.parseNewsConte nt(NewsList.java:231)
at com.astro.mania.activities.NewsList.parseServerRes ponse(NewsList.java:204)
at com.astro.mania.activities.NewsList.access$2(NewsL ist.java:203)
at com.astro.mania.activities.NewsList$MyAsyncTask.on PostExecute(NewsList.java:193)
at com.astro.mania.activities.NewsList$MyAsyncTask.on PostExecute(NewsList.java:1)
at android.os.AsyncTask.finish(AsyncTask.java:417)
at android.os.AsyncTask.access$300(AsyncTask.java:127 )
at android.os.AsyncTask$InternalHandler.handleMessage (AsyncTask.java:429)
at android.os.Handler.dispatchMessage(Handler.java:99 )
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.jav a:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCa ller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:626)
at dalvik.system.NativeStart.main(Native Method)

saeed_g21
شنبه 29 شهریور 1393, 12:41 عصر
شما خطای معروف java.lang.NullPointerException رو دارید
رخ دادن این خطا به خیلی چیزا بستگی داره از تعریف ناصحیح Object ها بگیر تا مثلا Query SQLite
کد اکتیویتی و لایوت رو بده

hamid2006
شنبه 29 شهریور 1393, 17:54 عصر
من مثال astro.mania آقای کمالان را اجرا کردم

package com.astro.mania.activities;


import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import cam.astro.mania.adapters.ImageAdapter;
import cam.astro.mania.adapters.NewsAdapter;
import com.astro.mania.classes.NewsFeedImageResizer;
import com.astro.mania.classes.NewsFeedItemList;
import com.astro.mania.handlers.NewsParserHandler;
import com.astro.mania.management.Manager;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.Gallery;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.Toast;


@SuppressLint("ShowToast")
@SuppressWarnings("deprecation")
public class NewsList extends Activity {


private ProgressDialog progressBar;
private NewsAdapter newsAdapter;
private Button btnSetting;
private Button btnMenu;
private Gallery gallery;
private GridView gridView;

private String strServerResponseMsg;
private NewsFeedItemList parsedList;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_newslist);

Log.i("NewsList", "NewsList activity started...");


// Creating an object of NewsAdapter for displaying data in the screen
newsAdapter = new NewsAdapter(this);

// Settings button should be invisible in this screen
btnSetting = (Button) findViewById(R.id.btn_menu_settings);
btnSetting.setVisibility(View.INVISIBLE);


// Menu button should be visible in this screen
btnMenu = (Button) findViewById(R.id.btn_menu_compound);
btnMenu.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// Intent intent = new Intent(Settings.this, MainMenu.class);
// startActivity(intent);
NewsList.this.finish();
}
});


// Initialising grid view to show news
gridView = (GridView) findViewById(R.id.news_gridview);
gridView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
Toast.makeText(NewsList.this, "" + position, Toast.LENGTH_SHORT).show();
}
});


// Initialising gallery view with predefined images
// Set middle image to be stayed in the middle of screen
ImageAdapter imAdapter = new ImageAdapter(this);
gallery = (Gallery) findViewById(R.id.gallery);
gallery.setAdapter(imAdapter);
gallery.setSelection(imAdapter.getCount()/2);
gallery.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
Toast.makeText(NewsList.this, "" + position, Toast.LENGTH_SHORT).show();
}
});


/* Running AsyncTask in order to get data from server */
if(isConnectedToInternet())
new MyAsyncTask().execute();
else
Toast.makeText(this, "Interconnection not found.", Toast.LENGTH_LONG);
}




@Override
protected void onStart() {
super.onStart();
Log.i("NewsList", "inside onStart();");
}



@Override
protected void onStop() {
super.onStop();

stopLoading();
Log.i("NewsList", "inside onStop(); myAsyncTask cancelled.");
}


/*----------------------------------------------------------------------------
* This method is responsible for creating another thread in parallel with
* main UI thread in order to connect to server and get data. When data
* received should display data in the screen after data prepared for display.
* --------------------------------------------------------------------------- */
public class MyAsyncTask extends AsyncTask<Void, Void, Boolean> {

@Override
protected void onPreExecute() {
Log.i("Inside AsyncTask", "myAsyncTask is abut to start...");
showLoading();
}


@Override
protected Boolean doInBackground(Void... params) {
boolean status = false;

try {
URL url = new URL(Manager.NEWS_URL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(Manager.ConnTimeout);
conn.setReadTimeout(Manager.ReadTimeout);

int responseCode = conn.getResponseCode();
Log.i("Connection oppened", "Response code is:" + responseCode);
if (responseCode == HttpURLConnection.HTTP_OK) {
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
if (in != null) {
StringBuilder strBuilder = new StringBuilder();
// Read character by character
int ch = 0;
while ((ch = in.read()) != -1)
strBuilder.append((char) ch);

// Showing returned message
strServerResponseMsg = strBuilder.toString();
// Log.i("Data returned by server:", strServerResponseMsg);

status = true;
}
in.close();
}

} catch (IOException e) {
e.printStackTrace();
}

return status;
}



@Override
protected void onPostExecute(Boolean result) {
Log.i("Inside AsyncTask", "myAsyncTask finished its task. Data returned to caller.");
parseServerResponse();
displayData();
stopLoading();
}
}



/*----------------------------
* NEWS Parser & Image Resizer
* ---------------------------*/
private void parseServerResponse(){
parsedList = parseNewsContent();

NewsFeedImageResizer imgResizer = new NewsFeedImageResizer(this, parsedList.getImage());
ArrayList<String> newLinks = imgResizer.getNewLinks();
Collections.copy(parsedList.getImage(), newLinks);
// for(int i=0; i<parsedList.getImage().size(); i++)
// Log.i("images_parsedList>>>", parsedList.getImage().get(i));
}


/*-----------------------------------------------------------------------
* This method parses the content of News based of SAX Parser method and
* the returns parsed content with "itemList" object. This object has six
* properties which each of them is ArrayList.
* ---------------------------------------------------------------------- */
private NewsFeedItemList parseNewsContent() {
NewsParserHandler newsParserHandler = null;

Log.i("NewsList", "Starting to parse XML...");

try {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
XMLReader xr = parser.getXMLReader();
newsParserHandler = new NewsParserHandler();
xr.setContentHandler(newsParserHandler);

ByteArrayInputStream is = new ByteArrayInputStream(strServerResponseMsg.getBytes ());
xr.parse(new InputSource(is));


} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

NewsFeedItemList itemList = newsParserHandler.getNewsList();
// checkLog(itemList);


Log.i("NewsList", "Parsing XML finished. Sending result back to caller...");
return itemList;
}


/*--------------------------------------
* Setup adapter and displaying data
* -------------------------------------*/
private void displayData(){
newsAdapter.setData(parsedList);
gridView.setAdapter(newsAdapter);
newsAdapter.notifyDataSetChanged();
}



/*-----------------------------------------------------------------------------------
* Checking Internet connection. True: connection found, False: connection not found
* ---------------------------------------------------------------------------------*/
public boolean isConnectedToInternet(){
Log.i("NewsList", "Checking Internet Connection...");

ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnectedOrConnecting()) {
Log.i("NewsList", "Internet Connection found.");
return true;
}

Log.i("NewsList", "Internet Connection not found.");
return false;
}


/*-----------------------------------------------------------------------------------
* Showing / Stopping progress dialog which is showing loading animation
* ---------------------------------------------------------------------------------*/
private void showLoading(){
progressBar = ProgressDialog.show(NewsList.this, "", "");
progressBar.setContentView(R.layout.anim_loading);
progressBar.setCancelable(true);
final ImageView imageView = (ImageView) progressBar.findViewById(R.id.blankImageView);
Animation rotation = AnimationUtils.loadAnimation(NewsList.this, R.anim.rotate);
imageView.startAnimation(rotation);
}


private void stopLoading() {
if(progressBar.isShowing())
progressBar.dismiss();
}


/* ----------------------------------------------------------------------------------
* This method just shows the result of data which is parsed and show it in Logcat.
* ----------------------------------------------------------------------------------*/
@SuppressWarnings("unused")
private void checkLog(NewsFeedItemList itemList) {
ArrayList<String> listTitle = itemList.getTitle();
ArrayList<String> listDescription = itemList.getDescription();
ArrayList<String> listFullbody = itemList.getFullbody();
ArrayList<String> listLink = itemList.getLink();
ArrayList<String> listPubDate = itemList.getPubDate();
ArrayList<String> listImage = itemList.getImage();

for(String str: listTitle)
Log.i("listTitle", str);
for(String str: listDescription)
Log.i("listDescription", str);
for(String str: listFullbody)
Log.i("listFullbody", str);
for(String str: listLink)
Log.i("listLink", str);
for(String str: listPubDate)
Log.i("listPubDate", str);
for(String str: listImage)
Log.i("listImage", str);
}

}




<?xml version="1.0" encoding="utf-8"?>


<RelativeLayout
xmlns:android = "http://schemas.android.com/apk/res/android"
android:layout_width = "fill_parent"
android:layout_height = "fill_parent"
android:background = "@drawable/bg" >


<!-- Loading header of this UI which is coded separately -->
<include
android:id = "@+id/header"
layout = "@layout/header_bar" />



<Gallery
android:id = "@+id/gallery"
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:layout_alignParentBottom = "true" />



<GridView
android:id = "@+id/news_gridview"
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:layout_marginTop = "10dip"
android:numColumns = "2"
android:verticalSpacing = "5dp"
android:horizontalSpacing = "5dp"
android:layout_below = "@id/header"
android:layout_above = "@id/gallery" />



<!-- <include
android:id="@+id/footer"
layout="@layout/footer_gallery" /> -->


</RelativeLayout>

saeed_g21
شنبه 29 شهریور 1393, 18:04 عصر
شما که در اکتیویتی 2تا باتن تعریف کردید در لایوت من چیزی نمی بینم

اونارو درست کن بعد تست بزن نتیجه رو بگو

hamid2006
شنبه 29 شهریور 1393, 19:24 عصر
همان طور که گفتم مثال آماده هست
http://www.kamalan.com//download/movies/fa_tutorials/Chapter06-WebServices/Astro_Mania.rar