我的应用程序正在粉碎,但logcat没有显示任何内容。
我认为它在布局中有一些东西,但是当我在java文件上禁用一些findViewById
时,布局会加载..
我的布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".ItemView" >
<Space
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="136dp"
android:layout_marginTop="205dp" />
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_marginBottom="191dp"
android:layout_marginRight="156dp"
android:text="Item Title"
android:background="#DCFFFF"
android:textAppearance="?android:attr/textAppearanceMedium" />
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/title"
android:layout_alignLeft="@+id/title"
android:layout_alignParentRight="true"
android:layout_alignTop="@+id/title"
android:layout_marginLeft="140dp"
android:background="#d5d4d4"
android:src="@android:drawable/gallery_thumb" />
<ScrollView
android:id="@+id/scrollView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/title"
android:layout_alignParentBottom="true"
android:layout_alignRight="@+id/imageView1"
android:layout_below="@+id/loadaddr"
android:background="#ADF3F2" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="17dp"
android:orientation="vertical" >
<TextView
android:id="@+id/desc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Item Description" />
<TextView
android:id="@+id/pub"
android:layout_width="123dp"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:text="Publisher" />
</LinearLayout>
</ScrollView>
<ProgressBar
android:id="@+id/loadimg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/imageView1"
android:layout_alignLeft="@+id/imageView1"
android:layout_marginBottom="94dp"
android:layout_marginLeft="48dp" />
<ProgressBar
android:id="@+id/loadaddr"
style="?android:attr/progressBarStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/addr"
android:layout_alignLeft="@+id/loadimg"
android:layout_marginLeft="15dp" />
<TextView
android:id="@+id/addr"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/title"
android:layout_below="@+id/imageView1"
android:gravity="center"
android:text="Fetching Address" />
</RelativeLayout>
这是我的Java文件:
package com.example.free;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Locale;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import com.example.free.MainActivity.Load;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.location.Address;
import android.location.Geocoder;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.app.ProgressDialog;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
public class ItemView extends Activity {
public void ToastLoadShout(String msg){Toast.makeText(this, msg.toString(), Toast.LENGTH_LONG).show();}
item item;
ProgressBar Loadaddr;
ProgressBar Loadimg;
String addrString="";
String requestUrl;
String downloadUrl;
String lat,lon;
int id;
TextView title;
TextView addr;
TextView desc;
TextView pub;
ImageView view;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_item_view);
/*title = (TextView)findViewById(R.id.title);
Loadaddr =(ProgressBar)findViewById(R.id.loadaddr);
Loadimg =(ProgressBar)findViewById(R.id.loadimg);
addr = (TextView)findViewById(R.id.addr);
desc = (TextView)findViewById(R.id.desc);
pub = (TextView)findViewById(R.id.pub);*/
view= (ImageView)findViewById(R.id.imageView1);
item = getIntent().getParcelableExtra("thing");
lat=item.getLat()+"";
lon=item.getLon()+"";
/*title.setText(item.getTitle());
desc.setText(item.getDesc());
pub.setText(item.getPub());*/
id=item.getId();
//new Load().execute();
downloadUrl="http://apple.sourcherry.tk/freeapp/img/"+id+".jpg";
new ImageDownloader().execute(downloadUrl);
}
public String GetAddress(String lat, String lon)
{
Geocoder geocoder = new Geocoder(this, Locale.ENGLISH);
String ret = "";
try {
List<Address> addresses = geocoder.getFromLocation(Double.parseDouble(lat), Double.parseDouble(lon), 1);
if(addresses != null) {
Address returnedAddress = addresses.get(0);
StringBuilder strReturnedAddress = new StringBuilder("");
for(int i=0; i<returnedAddress.getMaxAddressLineIndex(); i++) {
strReturnedAddress.append(returnedAddress.getAddressLine(i)).append("\n");
}
ret = strReturnedAddress.toString();
}
else{
ret = "Unknown Address";
}
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
ret = "Can't get Address";
}
return ret;
}
class Load extends AsyncTask<String, Integer, Boolean>
{
@Override
protected void onPreExecute() {
}
@Override
protected Boolean doInBackground(String... params) {
try {
addrString = GetAddress(lat,lon);
if (addrString!="")
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
return false;
}
@Override
protected void onPostExecute(Boolean res) {
// TODO Auto-generated method stub
if (res){
addr.setText(addrString);
Loadaddr.setVisibility(View.INVISIBLE);
}
else
addr.setText("Unable to fetch address.");
}
}
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.item_view, menu);
return true;
}
private class ImageDownloader extends AsyncTask<String,String,Bitmap> {
protected Bitmap doInBackground(String... param) {
// TODO Auto-generated method stub
return downloadBitmap(param[0]);
}
protected void onPreExecute(String res) {
Log.i("Async-Example", "onPreExecute Called");
}
protected void onPostExecute(Bitmap result) {
Log.i("Async-Example", "onPostExecute Called");
view.setImageBitmap(result);
Loadimg.setVisibility(View.INVISIBLE);
}
private Bitmap downloadBitmap(String url) {
// initilize the default HTTP client object
final DefaultHttpClient client = new DefaultHttpClient();
//forming a HttoGet request
final HttpGet getRequest = new HttpGet(url);
try {
HttpResponse response = client.execute(getRequest);
//check 200 OK for success
final int statusCode = response.getStatusLine().getStatusCode();
if (statusCode != HttpStatus.SC_OK) {
Log.w("ImageDownloader", "Error " + statusCode +
" while retrieving bitmap from " + url);
return null;
}
final HttpEntity entity = response.getEntity();
if (entity != null) {
InputStream inputStream = null;
try {
// getting contents from the stream
inputStream = entity.getContent();
// decoding stream data back into image Bitmap that android understands
final Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
return bitmap;
} finally {
if (inputStream != null) {
inputStream.close();
}
entity.consumeContent();
}
}
} catch (Exception e) {
// You Could provide a more explicit error message for IOException
getRequest.abort();
Log.e("ImageDownloader", "Something went wrong while" +
" retrieving bitmap from " + url + e.toString());
}
return null;
}
}
}
Logcat毕竟显示:
08-11 19:54:45.437: E/AndroidRuntime(1218): FATAL EXCEPTION: main
08-11 19:54:45.437: E/AndroidRuntime(1218): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.free/com.example.free.ItemView}: java.lang.ClassCastException: android.widget.TextView cannot be cast to android.widget.ProgressBar
08-11 19:54:45.437: E/AndroidRuntime(1218): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2308)
08-11 19:54:45.437: E/AndroidRuntime(1218): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358)
08-11 19:54:45.437: E/AndroidRuntime(1218): at android.app.ActivityThread.access$600(ActivityThread.java:153)
08-11 19:54:45.437: E/AndroidRuntime(1218): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247)
08-11 19:54:45.437: E/AndroidRuntime(1218): at android.os.Handler.dispatchMessage(Handler.java:99)
08-11 19:54:45.437: E/AndroidRuntime(1218): at android.os.Looper.loop(Looper.java:137)
08-11 19:54:45.437: E/AndroidRuntime(1218): at android.app.ActivityThread.main(ActivityThread.java:5227)
08-11 19:54:45.437: E/AndroidRuntime(1218): at java.lang.reflect.Method.invokeNative(Native Method)
08-11 19:54:45.437: E/AndroidRuntime(1218): at java.lang.reflect.Method.invoke(Method.java:511)
08-11 19:54:45.437: E/AndroidRuntime(1218): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
08-11 19:54:45.437: E/AndroidRuntime(1218): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
08-11 19:54:45.437: E/AndroidRuntime(1218): at dalvik.system.NativeStart.main(Native Method)
08-11 19:54:45.437: E/AndroidRuntime(1218): Caused by: java.lang.ClassCastException: android.widget.TextView cannot be cast to android.widget.ProgressBar
08-11 19:54:45.437: E/AndroidRuntime(1218): at com.example.free.ItemView.onCreate(ItemView.java:61)
08-11 19:54:45.437: E/AndroidRuntime(1218): at android.app.Activity.performCreate(Activity.java:5104)
08-11 19:54:45.437: E/AndroidRuntime(1218): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
08-11 19:54:45.437: E/AndroidRuntime(1218): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2262)
08-11 19:54:45.437: E/AndroidRuntime(1218): ... 11 more
在尝试移动布局上的一些文本视图之前,一切都很好。
我移动后,它开始粉碎。我试图把我搬回去的所有东西都放回去,但它没有帮助。
答案 0 :(得分:1)
在尝试移动布局上的一些文本视图之前,一切都很好。
这是尝试清理项目的好时机。
“项目 - &gt;清洁......”
有时Eclipse不会立即识别layout
更改,您将收到这些无意义的错误。从我看到的,你正在声明它并正确地初始化它,所以当你收到一条错误消息,说你试图将一个对象转换为另一个对象并且你知道你不是,清理项目时Eclipse应该正确检测它。这通常在更改xml文件后发生。
答案 1 :(得分:0)
更改
ProgressBar Loadaddr;
与
TextView Loadaddr;