آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

چگونه در برنامه اندرویدی بتونم عکس هارو که تو دیتابیس قرار دادم دانلود کنم؟

131590  5 سال پیش  5 سال پیش
0 0

سلام. من دارم برنامه ای شبیه دیوار می نویسم. الان میخام کاری کنم که عکس های آگهی رو از دیتا بیس دانلود کنه. خودم از یه جا یک قطعه کد برای این کار پیدا کردم ولی وقتی برنامه رو اجرا می کنم کرش میکنه. دوستان اگه کسی سورس کدی داره در اختیارم بذاره. سورس کدم رو هم قرار دادم مشکلش رو بگین.

private class ImageDownloaderTask extends
AsyncTask<HashMap<String, Object>, Void, HashMap<String, Object>>
{

@Override
protected HashMap<String, Object> doInBackground(HashMap<String, Object>... params)
{
InputStream mySteam;

String imgURL = (String) params[0].get("image_path");
int position = (Integer) params[0].get("position");

try
{

URL url = new URL(imgURL);

HttpURLConnection connection = (HttpURLConnection) url.openConnection();

connection.setDoInput(true);

connection.connect();

mySteam = connection.getInputStream();

File cacheDirectory = getBaseContext().getCacheDir();

File temp = new File(cacheDirectory.getPath()
+ "/image_" + position + "_" + current_page + ".png");

FileOutputStream outStream = new FileOutputStream(temp);

Bitmap b = BitmapFactory.decodeStream(mySteam);

b.compress(Bitmap.CompressFormat.PNG, 100, outStream);

outStream.flush();

outStream.close();

HashMap<String, Object> bitmap = new HashMap<>();

bitmap.put("image", temp.getPath());
bitmap.put("position", position);

return (bitmap);
}
catch(Exception e)
{
Log.i("Ahmad moenee", "error in ImageDonloaderTask ->" + e.toString());

}

return null;

}

@Override
protected void onPostExecute(HashMap<String, Object> result) {
String image = (String) result.get("image");

int position = (Integer) result.get("position");

SimpleAdapter adb = (SimpleAdapter) lv.getAdapter();

HashMap<String, Object> hm = (HashMap<String, Object>)
adb.getItem(position);

hm.put("image", image);

adb.notifyDataSetChanged();

}

}
0 0
خب متن ارور رو هم بذارین لطفاً (5 سال پیش)
 برای این سوال 4 پاسخ وجود دارد.
پاسخ به سوال 
131590  5 سال پیش
0 0

سلام. اینم متن ارور

09-15 03:55:13.806 2529-3001/com.example.np.myapp I/Ahmad moenee: error in ImageDonloaderTask ->java.net.MalformedURLException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
09-15 03:55:13.807 2529-3001/com.example.np.myapp I/Ahmad moenee: error in ImageDonloaderTask ->java.net.MalformedURLException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
09-15 03:55:13.809 2529-3001/com.example.np.myapp I/Ahmad moenee: error in ImageDonloaderTask ->java.net.MalformedURLException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
09-15 03:55:13.810 2529-3001/com.example.np.myapp I/Ahmad moenee: error in ImageDonloaderTask ->java.net.MalformedURLException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
09-15 03:55:13.810 2529-3001/com.example.np.myapp I/Ahmad moenee: error in ImageDonloaderTask ->java.net.MalformedURLException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
09-15 03:55:13.810 2529-3001/com.example.np.myapp I/Ahmad moenee: error in ImageDonloaderTask ->java.net.MalformedURLException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
09-15 03:55:13.854 2529-2529/com.example.np.myapp D/AndroidRuntime: Shutting down VM


--------- beginning of crash
09-15 03:55:13.855 2529-2529/com.example.np.myapp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.np.myapp, PID: 2529
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object java.util.HashMap.get(java.lang.Object)' on a null object reference
at com.example.np.myapp.ads_agahi$ImageDownloaderTask.onPostExecute(ads_agahi.java:296)
at com.example.np.myapp.ads_agahi$ImageDownloaderTask.onPostExecute(ads_agahi.java:236)
at android.os.AsyncTask.finish(AsyncTask.java:667)
at android.os.AsyncTask.-wrap1(AsyncTask.java)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:684)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

0 0
درست متوجه نشدم ولی مثل اینکه به متد onPostExecute ، مقدار نمیفرستین... (5 سال پیش)
0 0
دوستان کسی نیست راهنمایی کنه؟ (5 سال پیش)
پاسخ به سوال 
131590  5 سال پیش
0 0

دوستان من سورس کد اکتیویتی رو میزارم. ( سورس کد دانلود عکس هم داخلش موجود هست)

package com.example.np.myapp;

import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleAdapter;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class ads_agahi extends AppCompatActivity {

private boolean go_next = false;

private String url_ads;
private int current_page = 0;

private ListView lv;

private List<HashMap<String, Object>> all_ads = new ArrayList<>();

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

clear_cache();

Bundle address = getIntent().getExtras();

url_ads = address.getString("url");

lv = (ListView) findViewById(R.id.ads_list);

make_ads_list();

lv.setOnScrollListener(

new AbsListView.OnScrollListener() {

@Override
public void onScrollStateChanged(AbsListView view, int scrollState)
{
if ( scrollState == 1)
{
if (view.getId() == lv.getId())
{
int currentFirstVisibleItem = lv.getFirstVisiblePosition();
int mLastFirstVisibleItem = lv.getLastVisiblePosition();

if (currentFirstVisibleItem > mLastFirstVisibleItem)
{
// go up
} else if (currentFirstVisibleItem < mLastFirstVisibleItem) {
// go down
if (go_next == true)
{
go_next = false;

make_ads_list();
}

}

mLastFirstVisibleItem = currentFirstVisibleItem;


}

}
}

@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)
{

}



}

);

lv.setOnItemClickListener(
new AdapterView.OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
Intent intent = new Intent( getApplicationContext(), show_full_ads.class);

intent.putExtra("ads" , all_ads.get(position));

startActivity(intent);

}
}




);
}

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

clear_cache();
}

public void make_ads_list()
{
try {

DownloadTask dl = new DownloadTask();

dl.execute(url_ads + current_page);

current_page++;


}


catch (Exception e)
{

Log.i("Ahmad moenee", "error in ads in make_ads_list() ->" + e.toString());

}
}

private class DownloadTask extends AsyncTask<String, Void, String> {


@Override
protected String doInBackground(String... params) {
String temp = "";

try {
JSONDownloader jd = new JSONDownloader();

temp = jd.downloadURL(params[0]);


} catch (Exception e) {

Log.i("Ahmad moenee", "error in DownloadTask ->" + e.toString());

}

return (temp);
}

@Override
protected void onPostExecute(String s) {
ListViewLoaderTask loader = new ListViewLoaderTask();

loader.execute(s);


}
}

private class ListViewLoaderTask extends AsyncTask<String, Void, SimpleAdapter> {

@Override
protected SimpleAdapter doInBackground(String... params) {
try {
AdsParser parser = new AdsParser();
all_ads.addAll(parser.parse(params[0]));
} catch (Exception e) {

Log.i("Ahmad moenee", "error in ListViewLoaderTask ->" + e.toString());

}

String[] from = {"image", "title", "intro", "date", "cat"};

int[] to = {R.id.ads_img, R.id.ads_title, R.id.ads_intro,
R.id.ads_date, R.id.ads_cat};

SimpleAdapter adb = new SimpleAdapter(
getBaseContext(), all_ads, R.layout.ads_list_row, from, to
);

return adb;
}


@Override
protected void onPostExecute(SimpleAdapter adapter) {

lv.setAdapter(adapter);

for (int i = 0; i < adapter.getCount(); i++) {

HashMap<String, Object> hm =
(HashMap<String, Object>) adapter.getItem(i);

String imgURL = (String) hm.get("image_path");

HashMap<String, Object> forDownload = new HashMap<>();

forDownload.put("image_path", imgURL);
forDownload.put("position", i);

ImageDownloaderTask imgDownloader = new ImageDownloaderTask();

imgDownloader.execute(forDownload);

}

go_next = true;

}
}

private class ImageDownloaderTask extends
AsyncTask<HashMap<String, Object>, Void, HashMap<String, Object>>
{


@Override
protected HashMap<String, Object> doInBackground(HashMap<String, Object>... params)
{
InputStream mySteam;

String imgURL = (String) params[0].get("image_path");
int position = (Integer) params[0].get("position");

try
{

URL url = new URL(imgURL);

HttpURLConnection connection = (HttpURLConnection) url.openConnection();

connection.setDoInput(true);

connection.connect();

mySteam = connection.getInputStream();

File cacheDirectory = getBaseContext().getCacheDir();

File temp = new File(cacheDirectory.getPath()
+ "/image_" + position + "_" + current_page + ".png");

FileOutputStream outStream = new FileOutputStream(temp);

Bitmap b = BitmapFactory.decodeStream(mySteam);

b.compress(Bitmap.CompressFormat.PNG, 100, outStream);

outStream.flush();

outStream.close();

HashMap<String, Object> bitmap = new HashMap<>();

bitmap.put("image", temp.getPath());
bitmap.put("position", position);

return (bitmap);
}
catch(Exception e)
{
Log.i("Ahmad moenee", "error in ImageDonloaderTask ->" + e.toString());

}

return null;

}

@Override
protected void onPostExecute(HashMap<String, Object> result) {
String image = (String) result.get("image");

int position = (Integer) result.get("position");

SimpleAdapter adb = (SimpleAdapter) lv.getAdapter();

HashMap<String, Object> hm = (HashMap<String, Object>)
adb.getItem(position);

hm.put("image", image);

adb.notifyDataSetChanged();

}

}

public void clear_cache()
{

try
{
File[] f = getBaseContext().getCacheDir().listFiles();

for (File file : f ) {
file.delete();
}


}
catch ( Exception e )
{
Log.i("Ahmad moenee", "error in clear_cache() ->" + e.toString());
}

}


public void onbackToHomeClick(View v)
{

finish();
}
}

پاسخ به سوال 
131590  5 سال پیش
0 0

دوستان یه سوال دیگه هم دارم. من چند تا عکس تو هاستم آپلود کردم. چجوری آدرس عکس رو به دیتا بیس بدم که برنامه بتونه عکس ها رو از دیتابیس دانلود کنه؟

اینم تصویردیتابیس

اینم تصویر هاست (جایه آپلود عکس ها)

0 0
برای اون عکس اولی به عنوان مثال میشه www.yourdomain/ahmad2/birjand.jpg (5 سال پیش)
0 0
ببخشید میشه ahmad2/img/birjand.jpg (5 سال پیش)
پاسخ به سوال 
131590  5 سال پیش
0 0

مطمئنید؟ یا میشه img/birjand.jpg

0 0
میتونی با مرورگر سیستمت امتحان کنی دیگه ولی مطمئنم که همین میشه :www.yourdomain/ahmad2/img/birjand.jpg (5 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .